function [ w, iter ] = perco( X, y, maxEpoches )
%PERCTRAIN Perceptron Training Algorithm
%   Diese Funktion fuehrt das Perceptron Training durch.
%
% EINGABE:
%   X           Trainingsdaten
%   t           Targetwerte der Trainingsdaten
%   maxEpoches  Maximale Anzahl der Iterationen bis zum Abbruch

%
% AUSGABE:
%   w           Trainierter Gewichtsvektor 
%   iter        Anzahl der ausgefuehrten Trainigsepochen
stepSize=1;

[m,n] = size(X);
X = [ones(1,n);X];

% Gewichtsvektor wird mit einsen initialisiert
% Dimensionalitaet wird wegen der homogenen Koordinaten um eins erhoeht
w = zeros (m+1,1);

for iter = 1:maxEpoches
    misclassified = false;
    for i = 1:n
        if (dot(w',(X(:,i)*y(i))) <= 0)
            misclassified = true;
            w = w + stepSize*X(:,i)*y(i);
        end
    end
    % Abbruchbedingung, falls es zu keiner falschen klassifizierung
    % mehr kommt, dann wird abgebrochen
    if (~misclassified)
        break;
    end    
end

